// 导入 http 模块
import http from 'wechat-http'

// 设置请求的根路径
http.baseURL = 'https://live-api.itheima.net/'

// 配置请求拦截器
http.intercept.request = (options) => {
  // 扩展头信息
  const defaultHeader = {}
  // 身份认证
  defaultHeader.Authorization = 'Bearer ' + getApp().token
  // 与默认头信息合并
  options.header = Object.assign({}, defaultHeader, options.header)
  // 处理后的请求参数
  return options
}

//设置响应拦截器
http.intercept.response = async(res) => {
  console.log('响应拦截器', res)
  //token失效
  if (res.data.code === 401) {
    // 获取应用实例来读取 refreshToken
    const app = getApp()
    // console.log(app.refreshToken)
     // 1.3 状态为 401 且接口为 /refreshToken 表明 refreshToken 也过期了
     if (res.config.url.includes('/refreshToken')) {
      // 获取当前页面的路径，保证登录成功后能跳回到原来页面
      const pageStack = getCurrentPages()
      const currentPage = pageStack.pop()
      const redirectURL = currentPage.route
      // 跳由跳转（登录页面）
      return wx.redirectTo({
        url: '/pages/login/index?redirectURL=/' + redirectURL,
      })
    }
     // 1.1 调用接口获取新的 token
     const {token,refreshToken} = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: 'Bearer ' + app.refreshToken,
      },
    })
    // 重新存储新的 token
    app.setToken('token', token)
    app.setToken('refreshToken', refreshToken)
    console.log('更新token成功')
    // 1.2 获取到原来接口请求的参数
    const config = Object.assign(res.config,{
      header: {
        // 更新后的 token
        Authorization: 'Bearer ' + token,
      },
    })
    // 重新发请求
    return http(config)
  }
  if (res.data.code !== 10000) {
    wx.utils.toast(res.data.message)
    return Promise.reject(res.data.message)
  }
  return res.data.data
}
// 导出http模块
export default http